Saltar a contenido

📘 Clase 06: Testing Riguroso con Pytest, Mocks y Calidad

  • :material-bookmark: Curso: Curso 4: Taller Práctico & Proyecto Final Integrador (CLASE 06)
  • :material-signal-cellular-outline: Nivel: Nivel 4 - Integrador
  • :material-lightbulb-on: Metáfora Central: «El Laboratorio de Control de Calidad y las Pruebas de Estrés»
  • :material-laptop: Wisrovi Studio (Local): 🚀 Abrir Reto👨‍🏫 Modo Tutor
  • :material-file-pdf-box: Manual PDF Oficial: Descargar clase-06-testing-y-calidad.pdf

Open In Colab Abrir en Studio Local Ver en GitHub


1. 💡 Fundamentación Teórica y Modelo Mental

Garantía de calidad mediante pruebas automatizadas exhaustivas: 1. Pytest & Fixtures: Reutilización de estados de prueba limpios y desacoplados. 2. Mocks & Spies (unittest.mock): Simulación de llamadas a APIs externas sin gastar tokens reales. 3. Métricas de Cobertura (Coverage): Asegurar un mínimo del 85%+ de líneas evaluadas por la suite.

🌟 Modelo Mental de la Sesión: «El Laboratorio de Control de Calidad y las Pruebas de Estrés»

En esta sesión anclamos el aprendizaje en la metáfora del mundo real para visualizar cómo fluyen las estructuras de datos y el flujo de ejecución en la memoria.


2. 🗺️ Arquitectura de Ejecución y Diagrama de Flujo

flowchart TD
    A["🧪 Suite de Pruebas Pytest"] --> B["🔬 Test Unitarios (Funciones)"]
    A --> C["🌐 Test de Integración (API Endpoints)"]
    A --> D["🎭 Mocks de LLM (Zero Cost)"]
    B & C & D --> E{"¿Cobertura >= 85% y 0 Fallos?"}
    E -->|Sí| F["🏆 Aprobado para Despliegue"]
    E -->|No| G["⛔ Bloqueo en Pipeline"]
    style A fill:#1e293b,color:#ffffff,stroke:#3b82f6,stroke-width:2px
    style F fill:#059669,color:#ffffff,stroke:#34d399,stroke-width:2px
    style G fill:#881337,color:#ffffff,stroke:#fb7185,stroke-width:2px

3. 💻 Código de Implementación Práctica

```python def evaluar_calidad_demo(passed: int, total: int, coverage: float) -> bool: return (passed == total) and (coverage >= 85.0)

print("¿Calidad certificada?:", evaluar_calidad_demo(34, 34, 94.5)) ```

```python assert 2 + 2 == 4, "Aserción básica válida"

print("Aserción completada.") ```


4. 🛡️ Buenas Prácticas PEP 8: Antipatrones vs Código Pythonic

⚠️ Cuidado con los Antipatrones

def test_llm():
res = llamar_api_real_openai()  # ❌ Lento, frágil y cuesta dinero
def test_llm(mocker):
mocker.patch('llm.call', return_value='Respuesta Mock')  # ✅ Rápido y determinista

5. 🏋️ Desafío Práctico de la Clase

🎯 Enunciado del Reto

Crea una función suite_calidad_codigo(cobertura_pct: float, tests_fallidos: int) -> tuple[bool, str] que retorne (True, 'Certificado') si cobertura_pct >= 85.0 y tests_fallidos == 0, o (False, 'Calidad insuficiente') en caso contrario.

⚡ Resolución Híbrida en 1 Clic (Local + Web)

Si tienes ejecutando wisrovi ui en tu terminal local, puedes 🚀 Abrir este Reto directamente en tu Studio Local (127.0.0.1:8501) para escribir tu código con auto-formateo AST, inspeccionar variables en el Heap/Stack y evaluarlo con pruebas en tiempo real.

def suite_calidad_codigo(cobertura_pct: float, tests_fallidos: int) -> tuple[bool, str]:
# ✍️ Valida cobertura >= 85.0 y tests_fallidos == 0
if cobertura_pct >= 85.0 and tests_fallidos == 0:
    return (True, "Certificado")
return (False, "Calidad insuficiente")
💡 Pista Socrática 1

💡 Pista 1: Comprueba cobertura_pct >= 85.0 and tests_fallidos == 0.

💡 Pista Socrática 2

💡 Pista 2: Si cumple, retorna (True, 'Certificado').

💡 Pista Socrática 3

💡 Pista 3: En caso contrario retorna (False, 'Calidad insuficiente').

Para resolver este ejercicio en tu entorno: 1. Abre el archivo ejercicios/reto.py de esta clase en Visual Studio Code o utiliza wisrovi ui / wisrovi tutor. 2. Implementa tu solución cumpliendo los requisitos y contratos de tipado. 3. Valida tus resultados ejecutando las pruebas unitarias:

pytest tests/curso_04/test_clase_06_testing_y_calidad.py


6. 📚 Fuentes y Bibliografía Recomendada